package proxypattern.impl;

import proxypattern.base.IPersonBean;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * Handler处理器类 拥有者
 * @author yaojianfeng
 */
public class OwnerInvocationHandler implements InvocationHandler {
    private IPersonBean personBean;

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        if (method.getName().startsWith("get")){
            //如果方法是一个getter,我们就调用person的方法
            return method.invoke(personBean,args);
        }else if ("setHotOrNotRating".equals(method.getName())){
            //否则,如果方法是setHotOrNotRating 抛出异常 表示不允许
            throw new IllegalAccessException();
        }else if (method.getName().startsWith("set")){
            //因为我们是拥有者,所以任何其他的set方法都可以,我们就在真正的主题上调用它
            return method.invoke(personBean,args);
        }
        //如果调用其他的方法,一律不理,返回null
        return null;
    }

    /**
     * 我们将person传入构造器 并保持对它的引用
     * @param personBean
     */
    public OwnerInvocationHandler(IPersonBean personBean) {
        this.personBean = personBean;
    }

}
